'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
	const { router, controller } = app;
	// 测试
	router.get('/', controller.home.index);
	// 注册
	router.post('/reg', controller.user.reg);
	// 登录
	router.post('/login', controller.user.login);
	// 退出
	router.post('/logout', controller.user.logout);
	// 搜索用户
	router.post('/search/user', controller.search.user);
	// 申请添加好友
	router.post('/apply/addfriend', controller.apply.addFriend);
	// 获取申请列表
	router.post('/apply/:page', controller.apply.list);
	// 处理好友申请
	router.post('/apply/handle/:id', controller.apply.handle);
	// 通讯录列表
	router.get('/friend/list', controller.friend.list)
	// 查询用户资料
	router.get('/friend/read/:id', controller.friend.read);
	// 黑名单
	router.post('/friend/setblack/:id', controller.friend.setblack);
	// 设置星标好友
	router.post('/friend/setstar/:id', controller.friend.setstar);
	// 设置朋友圈权限
	router.post('/friend/setmomentauth/:id', controller.friend.setMomentAuth)
	// 举报投诉好友/群组
	router.post('/report/save', controller.report.save)
	// 设置备注标签
	router.post('/friend/setremarktag/:id', controller.friend.setremarkTag);
	// 修改个人资料
	router.post('/user/update', controller.user.update);

	// app.ws.route('/wss', controller.chat.connect);
	// 执行中间件再执行websocket路由,客户端socket连接时执行
	app.ws.use(async (ctx, next) => {
	   // console.log('auth====================================')
	    // 获取参数 ws://localhost:7001/ws?token=123456
	    // ctx.query.token
	    // 验证用户token
	    let user = {};
	    let token = ctx.query.token;
	    try {
	        user = await ctx.checkToken(token, true);
	        // 验证用户状态
	        if (!user) {
	            ctx.websocket.send(JSON.stringify({
	                msg: "fail",
	                data: '验证失败,请重新登录'
	            }));
	            return ctx.websocket.close();
	        }
					let userCheck = await app.model.User.findByPk(user.id);
	        if (!userCheck || !userCheck.status) {
	            ctx.websocket.send(JSON.stringify({
	                msg: "fail",
	                data: '用户不存在或已被禁用'
	            }));
	            return ctx.websocket.close();
	        }
	        // 用户上线
	        app.ws.user = app.ws.user ? app.ws.user : {};
	        // 下线当前进程其他设备,你妹这里又是异步的
	         if (app.ws.user[user.id] && await ctx.getOnline(user.id)) {
	            console.log('你的账号在其他设备登录')
	            // clear因为这里执行完,close会把当前连接给close,而不是被挤下那个连接
	            //app.ws.clear = true
	            // 客户端断网不会触发onclose事件,恢复网络会走这里,应该客户端上一次连接已经关闭,
	            // 此时,这条消息不会发给客户端
	            app.ws.user[user.id].send(JSON.stringify({
	                msg: "fail",
	                data: '你的账号在其他设备登录'
	            }));
	            app.ws.user[user.id].close();
	            delete app.ws.user[user.id]
	        }   
	        // 记录当前用户id
	        ctx.websocket.user_id = user.id;
			// 把当前用户socket对象放在user中
	        //app.ws.user[user.id] = ctx.websocket;
			ctx.online(user.id)
	        await next();
	    } catch (err) { 
	        let fail = err.name === 'TokenExpiredError' ? 'token 已过期! 请重新获取令牌' : 'Token 令牌不合法!';
	        ctx.websocket.send(JSON.stringify({
	            msg: "fail",
	            data: fail
	        }))
	        // 关闭连接
	        ctx.websocket.close(); 
	    }
	});
	// websocket
	app.ws.route('/ws', controller.chat.connect);
	// 发送消息
	router.post('/chat/send', controller.chat.send)
	// 创建群聊
	router.post('/group/create', controller.group.create)
	// 获取离线消息
	router.post('/chat/getmessage', controller.chat.getmessage)
	router.post('/user/websocketerr', controller.user.websocketErr)
	// 修改群名称
	router.post('/group/rename', controller.group.rename)
	// 修改用户在群中的昵称
	router.post('/group/nickname', controller.group.nickname)
	// 推送群公告
	router.post('/group/remark', controller.group.remark)
	// 删除并退出群聊
	router.post('/group/quit', controller.group.quit)
	// 生成群二维码
	router.get('/group_qrcode/:id', controller.group.qrcode)
	// 生成用户二维码
	router.get('/user_qrcode/:id', controller.user.qrcode)
	// 群主踢出某个成员
	router.post('/group/kickoff', controller.group.kickoff)
	// 邀请加入群聊
	router.post('/group/invite', controller.group.invite)
	// 验证群聊和当前用户的关系
	router.post('/group/checkrelation', controller.group.checkrelation);
	// 加入群聊
	router.post('/group/join', controller.group.join);
	// 获取群聊列表
	router.post('/group/:page', controller.group.list)
	// 获取群资料
	router.get('/group_info/:id', controller.group.info)
	// 上传文件
	router.post('/upload', controller.common.upload)
    // 上传文件(本地)
	router.post('/uploadlocal', controller.common.uploadLocal)
	// 撤回
	router.post('/chat/recall', controller.chat.recall)
	// 创建收藏
	router.post('/fava/create', controller.fava.create);
	// 收藏列表
	router.get('/fava/:page', controller.fava.list);
	// 删除收藏
	router.post('/fava/destory', controller.fava.destory);
	// 删除好友
	router.post('/friend/destroy', controller.friend.destroy);
	// 发布朋友圈
	router.post('/moment/create', controller.moment.create);
	// 点赞
	router.post('/moment/like', controller.moment.like);
	// 朋友圈评论
	router.post('/moment/comment', controller.moment.comment);
	// 朋友圈列表
	router.get('/moment_timeline/:page', controller.moment.timeline)
	// 某个用户的朋友圈
	router.get('/moment_list/:page', controller.moment.list)
	// 标签列表
	router.get('/tag/list', controller.tag.list);
	// 标签用户列表
	router.get('/tag/read/:id', controller.tag.read);

};


